Monitoring data queues and providing alerts

ABSTRACT

A computer-implemented method, system, and computer-readable media are disclosed herein. In embodiments, the computer-implemented method may entail receiving, by a data service, live data associated with an entity. The entity may be, for example, a customer of the data service. The method may then route the live data to a dual-queue system of the data service. The live data may be loaded into a live data queue of the dual queue system for processing. Processing may entail generating summary statistics from the live data. An alert may then be transmitted to the customer in response to detecting the occurrence of one or more alert events. In embodiments, the alert events may include events identified in the summary statistics. Additional embodiments are described and/or claimed.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a Continuation of U.S. patent application Ser. No.15/799,720 filed Oct. 31, 2017 and titled “Monitoring Data Queues AndProviding Alerts,” which is itself a Continuation of U.S. applicationSer. No. 14/699,996, filed Apr. 29, 2015 which is now issued as U.S.Pat. No. 9,838,346. U.S. Pat. No. 9,838,346 is itself aContinuation-in-Part of U.S. patent application Ser. No. 14/217,454filed Mar. 17, 2014 which is now Abandoned and U.S. patent applicationSer. No. 14/530,445, filed Oct. 31, 2014 which is now issued as U.S.Pat. No. 9,753,818. U.S. Pat. No. 9,753,818 itself claims the benefit ofU.S. Provisional Application No. 62/053,101 filed Sep. 19, 2014. Theentire contents of each of the foregoing applications being incorporatedby reference herein.

TECHNICAL FIELD

The present disclosure generally relates to data processing.

BACKGROUND

Generally, a data server system is a system that performs dataoperations with respect to data stored in one or more repositories ofdata. Depending on the type of data server system, the data operationsmay range from simple operations, such as forwarding, storing, andretrieving the data, to more complex operations, such as calculatingstatistics based on the data and/or arranging or formatting the data. Anexample of a data server system is an event-based system, such as theSPLUNK Enterprise software produced and sold by Splunk Inc. of SanFrancisco, Calif.

In these and other types of data server systems, it can be difficult tooptimally perform data operations, particularly as the size and/orcomplexity of a data repository grows. System administrators may addadditional system resources to improve performance, but often theseresources may not achieve the desired results, and/or the added expenseand overhead for the additional system resources is undesirable.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 depicts an illustrative cloud-based system in which variousembodiments of the present disclosure may be employed.

FIG. 2 illustrates an example multi-tenant dual-queue system in whichtechniques described herein may be practiced, in accordance with variousembodiments.

FIG. 3 depicts an illustrative process flow for dynamicallyinstantiating a dual-queue node, in accordance with various embodimentsof the present disclosure.

FIG. 4 depicts a more detailed process flow of one or more processes ofFIG. 3, in accordance with various embodiments of the presentdisclosure.

FIG. 5 depicts an illustrative process flow for migrating a dual-queuenode from a multi-tenant system to a single tenant system, in accordancewith various embodiments of the present disclosure.

FIG. 6 depicts an illustrative process flow for moving data to anexternal data store where the external data store is only periodically,or ephemerally, in communication with the data service.

FIG. 7 depicts an illustrative process flow for monitoring a stale dataqueue for deletion events.

FIG. 8 depicts an illustrative process flow for alerting a customer upondetection of an alert event, in accordance with various embodiments ofthe present disclosure.

FIG. 9 is a block diagram of an example computing device in whichembodiments of the present disclosure may be employed.

DETAILED DESCRIPTION

In the following detailed description, reference is made to theaccompanying drawings which form a part hereof wherein like numeralsdesignate like parts throughout, and in which is shown, by way ofillustration, embodiments that may be practiced. It is to be understoodthat other embodiments may be utilized and structural or logical changesmay be made without departing from the scope of the present disclosure.Therefore, the following detailed description is not to be taken in alimiting sense, and the scope of embodiments is defined by the appendedclaims and their equivalents.

Various aspects of the illustrative embodiments will be described usingterms commonly employed by those skilled in the art to convey thesubstance of their work to others skilled in the art. However, it willbe apparent to those skilled in the art that alternate embodiments maybe practiced with only some of the described aspects. For purposes ofexplanation, specific numbers, materials, and configurations are setforth in order to provide a thorough understanding of the illustrativeembodiments. However, it will be apparent to one skilled in the art thatalternate embodiments may be practiced without these specific details.In other instances, well-known features are omitted or simplified inorder not to obscure the illustrative embodiments.

Various operations will be described as multiple discrete operations, inturn, in a manner that is most helpful in understanding the illustrativeembodiments; however, the order of description should not be construedas to imply that these operations are necessarily order dependent. Inparticular, these operations need not be performed in the order ofpresentation. Further, descriptions of operations as separate operationsshould not be construed as requiring that the operations be necessarilyperformed independently and/or by separate entities. Descriptions ofentities and/or modules as separate modules should likewise not beconstrued as requiring that the modules be separate and/or performseparate operations. In various embodiments, illustrated and/ordescribed operations, entities, data, and/or modules may be merged,broken into further sub-parts, and/or omitted.

The phrase “in one embodiment” or “in an embodiment” is used repeatedly.The phrase may refer to the same embodiment or another embodiment. Theterms “comprising,” “having,” and “including” are synonymous, unless thecontext dictates otherwise. The phrase “A/B” means “A or B.” The phrase“A and/or B” means “(A), (B), or (A and B).” The phrase “at least one ofA, B and C” means “(A), (B), (C), (A and B), (A and C), (B and C), or(A, B and C).”

It will be appreciated that the data processing techniques describedherein are suitable for use by various systems deployed in a variety ofoperating environments. FIG. 1 illustrates an example cloud-based system100, hereinafter “system 100,” in which the described techniques may bepracticed in accordance with various embodiments of the presentinvention.

System 100 comprises data service 102. Data service 102 may include aplurality of single tenant dual-queue systems 104 and a plurality ofmulti-tenant dual-queue systems 106. As used herein, a single tenantdual-queue system may include one or more servers (e.g., servers 114c-114 d) that have resources continuously or permanently dedicated toincoming or outgoing data of a single customer, while multi-tenantdual-queue systems may include one or more servers (e.g., 114 a-114 b)that have resources temporarily, ephemerally, or transiently allocatedto incoming or outgoing data of each of a plurality of customers on anas-needed or in an on-demand basis.

Because of the above mentioned varied resource allocation, it will beappreciated that the multi-tenant dual-queue systems 106 would generallyoffer a cost advantage on a per customer basis in addition to offeringgreater scalability than the single tenant dual-queue systems 104. Itwill also be appreciated that the single tenant dual-queue systems 104would typically offer greater or more consistent performance at agreater cost and less scalability. As such, data service 102 may be ableto offer a potential customer wishing to try out the services offered bydata service 102 a free, or reduced cost, trial period on themulti-tenant dual-queue systems 104 without the cost to the data service102 of having to implement a single tenant dual-queue system for such atrial. Data service 102 may then migrate the potential customer to thesingle tenant dual-queue systems, in the event the potential customerelects to subscribe to the services offered by data service 102 once thetrial has terminated. The multi-tenant dual-queue systems and the singletenant dual-queue systems are discussed in greater detail in referenceto FIG. 2.

System 100 further comprises one or more client devices (e.g., clientdevices 108 a-108 d) and one or more customer devices (e.g., customerdevices 110 a-110 c) that are communicatively coupled with data service102. This communicative coupling can be accomplished through the use ofone or more networks. The one or more networks may include anycombination of wide-area networks such as the Internet, virtualnetworks, wireless cellular network, and/or local networks. Data service102 may receive, over these one or more networks, live, or real-time,data that is generated by client computing devices 108 a-108 d forprocessing and/or forwarding of the live data by one of the singletenant dual-queue systems 104 or one of the multi-tenant dual-queuesystems 106.

Client devices 108 a-108 d and customer devices 110 a-110 c may includegeneral or special-purpose computing devices. Examples of such generalor special-purpose computing devices include, but are not limited to,tablet computers (e.g., 108 a), laptop computers (e.g., 108 b and 110a), mobile phones (e.g., 108 c), Internet of things (TOT) devices (e.g.,108 d), personal computers (e.g., 110 b), web servers/applicationservers (e.g., 110 c), and so forth. Client devices 108 a-108 d eachinclude one or more processors configured to execute computer-readableinstructions.

The computer-readable instructions executed by client devices 108 a-108d implement logic for one or more applications. These applications maybe, for instance, standalone applications whose instructions are foundin software packages that have been installed on the respective device,browser-based applications that are downloaded and executed transientlywithin the context of a web browser, web applications whose instructionsare executed by a web application server in response to requests fromclient applications, “plug-in” modules of code whose instructions arecalled in response to various triggering events within the context ofother applications or the operating system itself, and so forth. Inembodiments, client devices 108 a-108 d may be configured to transmitdata to data service 102. Such data may include data on usage and/orperformance of one or more of the above discussed applications.

In embodiments, the data received by data service 102 from each ofclient devices 108 a-108 d is segregated based on an entity to which thedata is associated. Such an entity may be, for example, a customer orpotential customer of data service 102, a type of device that generatedthe data, an application that generated the data, a project of acustomer, or any combination thereof.

As used herein, a project of a customer would include any entity that isbased on the customer and any additional criteria that are capable ofbeing determined from the data received. For example, a customer of thedata service may wish to keep data for different versions of the sameapplication separate. In such an example, the entity would be thecombination of the customer and the application version, or a singleunique project identifier. This segregation may occur on the fly as thedata is received by data service 102. Such a segregation may be carriedout by one or more additional servers of data service 102. Oncesegregated, the data may then be routed to the appropriate dual-queuesystem for processing of the data (e.g., a dual-queue system associatedwith the customer).

As mentioned above, single tenant dual-queue systems 104 andmulti-tenant dual-queue systems 106 comprise one or more servers 114a-114 d. Servers 114 a-114 d may be general or special-purposecomputers, comprising one or more processors and/or other suitablecomponents configured to execute instructions for processing,manipulating, storing, or forwarding the raw data received from theclient devices 108 a-108 d. The raw data received from client devices108 a-108 d and/or the resulting processed or manipulated data may bedirectly output to customer devices 110 a-110 c and/or persisted in datarepositories 112 a-112 d for backup or later retrieval by customerdevices 110 a-110 c.

Data repositories 112 a-112 d may be stored on any suitable computerreadable storage device. Such storage devices may include hard diskdrives, flash drives/solid state drives (SSD), disk arrays, storage areanetwork (SAN) devices, networked-attached storage devices, file serverdevices, or any other suitable data storage apparatus. In addition, datarepositories 112 a-112 d may be stored in any suitable underlyingform(s), such as disk blocks, file structures, database tables, etc., orany combination thereof. In some embodiments, multiple storage devicesmay be utilized in conjunction to store different portions of anindividual data repository on different storage devices. In otherembodiments, storage devices may be configured to store some or allportions of an individual data repository redundantly, using anysuitable backup and/or synchronization mechanism(s), such as, but notlimited to, a redundant array of independent disks (RAID).

Servers 114 a-114 d may be coupled to the data storage devices thatstore data repositories 112 a-112 d using any suitable mechanism,including, but not limited to, a Fiber Channel network, a SerialAdvanced Technology Attachment (SATA) link, a Universal Serial Bus (USB)connection, an Infiniband link, an Ethernet connection, etc., or anycombination thereof. Servers 114 a-114 d can send input/output requeststo the storage devices that store data repositories 112 a-112 d in orderto read and/or write to the data repositories 112 a-112 d. Theseinput/output requests can utilize any suitable protocol(s), depending onthe environment, including, without limitation, Server Message Blockprotocol, Network File System protocol, Small Computer System Interfaceprotocol, and/or Fibre Channel Protocol. In response, data serverdevices 114 a-114 d would receive data structures such as data blocks,files, tables, result sets, etc.

System 100 is only one example of the many types of operatingenvironments in which the techniques described herein may be practiced.Other suitable operating environments may include additional or fewerelements, in varying arrangements. For instance, in an embodiment, someor all of the data server devices 114 a-114 d are virtual serverdevices, some or all of which may execute on a single computing device.

FIG. 2 illustrates an example multi-tenant dual-queue system 200,hereinafter system 200, of a data service (e.g., data service 102 ofFIG. 1) in which techniques described herein may be practiced, accordingto an embodiment. The various components of system 200 are implementedat least partially by hardware at one or more computing devices, such asone or more hardware processors executing instructions, stored in one ormore computer-readable memories, for performing various functionsdescribed herein. In some embodiments, system 200 is implemented acrossa plurality of server computing devices, such as servers 114 a-114 d,that collectively implement the various components of system 200 as aset of server-side processes. In such embodiments, the plurality ofserver computing devices may include application framework(s), webserver(s), application server(s), and/or other conventional servercomponents that the depicted components utilize to provide the describedfunctionality. Such server computing devices may be virtual or actualcomputing devices. In other embodiments, system 200 is implemented on asingle server.

System 200 may include an input interface 206 that is utilized by system200 to receive live data stream 202 as well as data requests 238. Livedata stream 202 may include live data associated with a plurality ofentities, while data requests 238 may include requests for data receivedin the live data stream. As used herein, live data corresponds toreal-time data or data in motion. Live data typically has eitherremained in-memory (e.g. on an in-memory data path) or in-transmission(encoded in a signal being transmitted from one location to another)since being generated. In contrast, stale data corresponds to non-realtime data or data at rest. Stale data is typically retrieved fromnon-volatile memory, or otherwise fails to meet criteria of live data.As discussed further below, a request for data received in the live datastream may be fulfilled by live data, stale data, or a combinationthereof.

Live data stream 202 may comprise a plurality of transactions receivedfrom a plurality of source nodes, such as client devices 108 a-108 d.The data can be provided to input interface 206 in any of a variety ofpossible formats, which can optionally be repackaged and/or otherwisemodified to provide the transactions to system 200. In some embodiments,input interface 206 receives data in communications from the sourcenodes and asynchronously acknowledges the receipt to the source nodes.This can be accomplished by any suitable acknowledgment (e.g., ack 204),such as a close connection communication. Thus, system 200 can providean acknowledgment to the source node with low latency prior to storageor processing of the transaction by system 200. It will be appreciatedthat no acknowledgment may be recorded where the connection times out.

In a specific example, input interface 206 is a Hypertext TransferProtocol (HTTP) interface. In such an example, transactions of live datastream 202 are received by input interface 206 in an HTTP POST request.Taking the example further, data requests 238 may be formatted as HTTPGET requests. Each of these HTTP requests is known in the art and willnot be discussed in detail. The HTTP POST request, in some embodiments,includes a Uniform Resource Locator (URL) that identifies a specificdestination node (e.g., customer device 110 a-110 c) as an intendeddestination for the data. However, in other embodiments, the URL doesnot identify the specific destination node, and a specific destinationnode may not be identified until, for example, a request is received forthe data. It will be appreciated by those of skill in the art that alive data stream can be received via any number of interfaces. As such,the HTTP example discussed above should not be viewed as limiting ofthis disclosure and is merely meant to be illustrative of one possibleinterface.

Each transaction or request for data may be associated with a specificentity. Such an association may be manifest directly or indirectly inthe transaction or the request itself. For example, in some embodiments,an entity may correspond with a customer of the data service. In suchembodiments, the association of the customer with a transaction orrequest may be manifest directly through, for example, a customeridentifier that is included in the transaction or the request. In otherembodiments, the association of the customer with a transaction orrequest may be manifest indirectly by correlating a source of thetransaction or the request with the customer. For example, with respectto a transaction, the transaction may be received from an applicationassociated with the customer. Such an association may be maintained, forexample, in an application-customer mapping that correlates applicationswith respective customers. Returning to the HTTP POST example above, theURL could act to associate the data with a respective entity.

System 200 includes queue router 208. Queue router 208 comprisesprocesses configured to distribute transactions of the incoming livedata stream 202 to respective dynamic queue nodes 224 a-224 c. As livedata stream 202 enters system 200 through input interface 206, theindividual transactions of the live data stream 202 are initiallydirected to queue router 208. In embodiments, queue router 208 isconfigured to analyze each transaction of the live data stream 202 todetermine an identifier of an entity associated with the respectivetransaction. Queue router 208 then utilizes the identifier of the entityto determine if an existing one of the dynamic queue nodes 224 a-224 cis associated with the entity. This may be accomplished by referencingqueue-entity mapping 244. Queue-entity mapping 244 lists each existingdynamic queue node within system 200 correlated with a respectiveentity. For instance, the entity could be a customer and the customercould be associated with the transaction by way of a customer identifierincluded in the transaction. Queue router 208 may then utilize thecustomer identifier, in conjunction with the queue-entity mapping 244,to determine whether an existing dynamic queue node has been assigned tothat entity.

As depicted, each dynamic queue node 224 a-224 c includes a respectivequeue manager 226 a-226 c, a respective live data queue 228 a-228 c, anoptional transaction processor 230 a-230 c, and is coupled with arespective partition 220 a-220 c, containing a respective stale dataqueue 222 a-222 c and state data 246 a-246 c, that concerns the state ofthe respective dynamic queue node 224 a-224 c. Each of these componentswill be respectively referred to collectively as dynamic queue node 224,queue manager 226, live data queue 228, transaction processor 230,partition 220, stale data queue 222, and state data 246. Transactionprocessor may also be referred to herein as a data server node.

If an existing dynamic queue node has not been assigned to that entity,then queue router 208 may instruct queue instantiator 242 to instantiatea new dynamic queue node to process the received transactions orrequests associated with that entity. The queue instantiator 242, insome embodiments, initializes all of the individual components of thenew dynamic queue node. For example, as depicted, queue instantiator 242would initialize a queue manager for the new dynamic queue node. Thismay be accomplished, for example, by merely instantiating a new instanceof a queue manager application. Queue instantiator 242 would alsoinitialize a live data queue for the new dual-queue node along with atransaction processor to operate on the live data queue. This may beaccomplished, for example, by allocating a portion of memory to serve asthe live data queue and instantiating a new instance of the transactionprocessor.

Queue instantiator 224 may also initialize a partition of persistentdata store 232 to serve as the stale data queue and in which to storeany state data associated with the new dynamic queue node. If apartition already exists, this may be accomplished by identifying thepartition of persistent data store 232 associated with the entity andassociating the partition with the new dynamic queue node to serve asthe stale data queue. If the partition does not already exist, the queueinstantiator 242 may allocate a new partition in persistent data store232 and associate the new partition with the new dynamic queue node.Associating the partition with the new dynamic queue node may beaccomplished, for example, by loading an identifier associated with thepartition into the newly instantiated queue manager. Queue instantiator242 would then update the queue-entity mapping data 244 accordingly toinclude the new dynamic queue node and the associated entity.

In some embodiments, queue instantiator 242 may merely initialize thequeue manager for the new dynamic queue node. In such embodiments, thequeue manager may be configured to initialize the remaining componentsof the new dynamic queue node. In some embodiments, each queue router208 is integrated with its own queue instantiator 242, as opposed tobeing a separate component, as depicted. In an embodiment, the queueinstantiator 242 monitors system resources in system 200, and/oraccesses data supplied by queue monitor 236, discussed in detail below,to determine where to instantiate a new dynamic queue node.

If an existing dynamic queue node has been assigned to that entity, thenqueue router 208 can route the transaction to that dynamic queue nodefor processing. In dynamic queue node 224, the queue manager 226receives transactions from queue router 208. The queue manager 226 canassign a transaction identifier (ID), such as a Universally UniqueIdentifier (UUID), to each received transaction. A transactionidentifier can uniquely identify a transaction in the dynamic queue node224. The queue manager 226 can additionally store transactions in astale data queue 222 in association with the assigned transaction IDs.In various implementations, a copy of each transaction received by thequeue manager 226 is stored in the stale data queue 222 on persistentdata store 232. Persistent data store 232 may be any type ofnon-volatile storage device, such as, for example, a hard disk, or anyother non-volatile storage device discussed herein. The stored copy of atransaction can then be referred to as stale transaction data, or merelystale data.

The queue manager 226 also pushes, or loads, the received transactionsto the live data queue 228 as live transaction data. In some cases, thequeue manager 226 pushes all received transactions to the live dataqueue 228 as live transaction data. The queue manager 226 may push thereceived transactions to the live data queue 228 in a First in First Out(FIFO) manner (i.e., in a sequence that the transactions were received),by way of example. Although dynamic queue node 224 is depicted asincluding one live data queue, it will be appreciated that otherimplementations may employ multiple live data queues that can operate inparallel.

The live data queue 228 stores at least some of the live transactiondata that are pushed to it by the queue manager 226. In embodiments, thetransactions are stored in association with the correspondingtransaction identifiers in the live data queue 228. At least some of thelive transaction data that are stored in live data queue 228 mayeventually be sent to output interface 240, where they can be providedto a destination node as live transaction data, via an in-memory datapath (e.g., without going through stale data queue 222). However, aslater described in additional detail, for various reasons, at least somelive transaction data that are stored in the live data queue 228 may notbe provided to the destination node as live transaction data, via thein-memory data path. Those transactions may instead eventually beprovided to the destination node as stale transaction data from thestale data queue 222. Additionally, as described below, not alltransactions that are pushed to the live data queue 228 are accepted andstored by the live data queue 228. These transactions also may beprovided, by way of live data queue 228, to output interface 240 asstale transaction data from stale data queue 222. Put another way, thestale transaction data from stale data queue 222 may be provided to livedata queue 228, which would

The live data queue 228 may not accept and store live transactions fromthe queue manager 226 for any of a variety of reasons. In the presentimplementation, transactions that are accepted and stored by live dataqueue 228 fill live data queue 228. However, live data queue 228 wouldbe limited in how much data can be stored therein at any given time. Insome embodiments, the limit is defined as a number of transactions, suchas 20,000 transactions. However, the limit could be defined in otherways and also could be subject to other variables. Thus, live data queue228 may not accept and store one or more transactions when live dataqueue 228 has reached its capacity. Instead, the one or moretransactions may be dropped as live transaction data, and may later besent to output interface 240, by way of live data queue 228, as staletransaction data using the copy of the transaction stored in stale dataqueue 222.

An illustrative situation that may arise and result in live data queue228 having been filled up to a limit is where dynamic queue node 224 isreceiving transactions faster than the transactions can be sent throughthe in-memory data pathway. For example, queue manager 226 may bepushing transactions to live data queue 228 faster than live data queue228 can send transactions to output interface 240 to create space forthe pushed transactions. Thus, the pushed transactions may be dropped aslive transaction data. However, in accordance with various aspects ofthe present disclosure, the pushed transactions may later be sent asstale transaction data, by way of live data queue 228, via stale dataqueue 222.

Live data queue 228 can send transactions to output interface 240 inresponse to a request (e.g., data requests 238) being received by inputinterface 206 of system 200. Such a request may be considered a pullrequest. Pull requests can be for a number of transactions (e.g., asspecified by the request or determined by dynamic queue node 224). Forexample, a pull request can specify a number of transactions requestedfor a response to the pull request. Thus, the number of transactionscould vary between pull requests. If live data queue 228 is filled withat least the number of transactions being requested, a response to thepull request that is provided using output interface 240 can includethat number of transactions from live data queue 228. If live data queue228 is filled with more than the number of transactions being requested,transactions may remain in live data queue 228 for a subsequent pullrequest, or until the dynamic queue node is terminated, as discussedbelow. Where transactions remain, those transactions may be pushedforward in the live data queue of the present implementation (i.e. livedata queue 228), as queue manager pushes additional transactions to livedata queue 228.

Optionally, the remaining transactions could be removed and/ordeallocated from live data queue 228. An example of the remainingtransactions optionally being removed and/or deallocated from live dataqueue 228 is where queue manager 226 empties all transactions from livedata queue 228, as is later described in additional detail below. Theseremaining transactions may later be sent to output interface 240, by wayof live data queue 228, as stale transaction data from stale data queue222.

Where live data queue 228 is filled with less than the number oftransactions being requested, in various implementations, the responseto the pull request can include one or more transactions from stale dataqueue 222, in addition to the transactions from live data queue 228. Forexample, queue manager 226 may push the additional transactions to staledata queue 222. The amount of transactions included from stale dataqueue 222 can be such that the number of transactions (or optionally anylimit) for the pull request is not exceeded. Any transactions that maypossibly remain in stale data queue 222 can be treated in any of thevarious ways that have been described with respect to remainingtransactions in live data queue 228 (i.e., de-allocated, removed, oreventually pushed forward by additional transactions).

Thus, from the foregoing, it will be appreciated that a response to apull request can include a combination of live transaction data andstale transaction data. Furthermore, live transaction data from livedata queue 228 is generally prioritized over stale transaction databeing included in a response to a pull request. In particular, invarious implementations, the stale transaction data is included wherethere is headroom to reach a limit on the number of transactions in aresponse to a pull request. The headroom remains after including allavailable live transaction data from live data queue 228 and/or the livedata pipeline.

Thus, in some cases, transactions from stale data queue 222 are utilizedin a response to a pull request if the response is large enough to emptylive data queue 228. In this respect, destination nodes (e.g., customerdevices 110 a-110 c) may increase the number of transactions beingrequested as appropriate so as to increase the likelihood that staletransaction data is acquired. Furthermore, in low traffic scenarios,where live data queue 228 is not receiving transactions fast enough tobe filled when responding to a pull request, headroom may typically beavailable to include at least some stale transaction data from staledata queue 222 in a response.

It is noted, however, that stale data queue 222 may not necessarilyinclude any transactions in the aforementioned scenarios. For example,the transactions may not have been stored in stale data queue 222 whenneeded for a response to a pull request or no transactions may beavailable to store in stale data queue 222. No transactions may beavailable, for example, where the throughput of the dynamic queue node224 has remained sufficiently high to send received transactions todestination nodes as live transaction data, and where the destinationnodes are successfully receiving the transactions. In this case,transactions are quickly being forwarded by dynamic queue node 224 aslive transaction data by way of the live data pipeline.

In accordance with additional aspects of the present disclosure,destination nodes that receive transaction data from dynamic queue node224 can acknowledge the receipt of the data. Acknowledgments cancorrespond to stale transaction data and/or live transaction data. Queuemanager 226 can log the acknowledgments in an acknowledgment log ofstate data 246. In logging an acknowledgment, queue manager 226 maystore transactions with their associated transaction IDs, or may onlystore the associated transaction IDs. Thus, queue manager 226 canprovide entries in the acknowledgment log that correspond toacknowledged transactions. In some instances, queue manager 226 canmodify transactions in stale data queue 222 based on theacknowledgments, such as by deleting corresponding transactions therein.More particularly, the transactions may no longer be needed by dynamicqueue node 224 after they have been acknowledged, and therefore may bedeleted based on corresponding acknowledgements. As illustrated,acknowledgment log in state data 246 and stale data queue 222 aremaintained in separate files. The separate files are each stored innon-volatile storage (e.g., persistent data store 232). It is noted thatother configurations, such as a composite file for acknowledgements andtransactions, are possible.

In some implementations, any destination nodes are configured toacknowledge receiving transactions from output interface 240. Forexample, an acknowledgment can be sent based on receiving a response toa pull request. In some respects, an acknowledgment from a destinationnode can specify transaction identifiers of transactions that werereceived by the destination node. Acknowledgments of the specifiedtransactions can be stored in an acknowledgment log of state data 246 byqueue manager 226. In some implementations, an acknowledgmentcorresponds to a close connection communication, where the closeconnection communication corresponds to a response to a pull request.Based on the correspondence, queue manager 226 can determine whichtransactions to record as being acknowledged in the acknowledgment logof state data. In this way, queue manager 226 can synchronously recordacknowledgments for transactions provided to destination nodes.

Accordingly, dynamic queue node 224 can log and store incomingtransactions in stale data queue 222 and further log ones of thosetransactions that have been acknowledged as being received by one ormore destination nodes in the aforementioned acknowledgment log. Queuemanager 226 is configured to analyze stale data queue 222 and/or theacknowledgment log in state data 246 for transaction managementpurposes. For example, queue manager 226 can analyze stale data queue222 and the acknowledgment log for unacknowledged transactions, whichmay be sent to output interface 240, by way of live data queue 228, asstale transaction data from stale data queue 222. Queue manager 226 canfurther determine which unacknowledged transactions to include in thestale data pipeline(s) and/or the order in which to include thosetransactions.

In some respects, queue manager 226 can provide stale transaction datafrom stale data queue 222 to live data queue 228. In doing so, queuemanager 226 may periodically execute various functions to fill live dataqueue 228 with stale transaction data. The transactions that are used tofill live data queue 228 can be unacknowledged transactions. Queuemanager 226 may identify each transaction as being an unacknowledgedtransaction where the transaction is in stale data queue 222, but doesnot have a corresponding recorded acknowledgment in an acknowledgmentlog. In some respects, queue manager 226 may optionally take varioussteps to prevent duplicate data from being forwarded by dynamic queuenode 224 as a consequence of this approach. For example, in some cases,transactions are still being stored by queue manager 226 in stale dataqueue 222 and acknowledgements are still being recorded by queue manager226 both as new information. In such cases, the stale data queue 222 andacknowledgement logs used by queue manager 226 to discoverunacknowledged transactions are closed to this new information so thatthis new information does not accidentally result in duplicate databeing forwarded. Thus, this new information may be stored in a newlyallocated stale data queue and a newly allocated transaction log instale data. Later, at least a portion of the transactions from theclosed transaction and acknowledgment logs may be merged with the newtransaction and acknowledgement logs (e.g., transactions that were notsent).

Transaction processor 230 may operate on transactions within live dataqueue 228. Transaction processor 230 is a set of one or more processes,executed by processors or other suitable components within each of thedynamic queue nodes, that performs data operations with respect to oneor more data collections (e.g., Collections A-C), along with associatedin-memory data structures that support the data operations. Atransaction processor 230 is said to be assigned to the collection withrespect to which it performs data operations.

A transaction processor 230 performs data operations in response toreceipt of transaction data or data requests received by system 200.Data requests 238 may take any suitable form, depending on theembodiment. For instance, in an embodiment, data requests 238 may beformatted as Hypertext Terminal Protocol (HTTP) GET requests. In anotherembodiment, data requests 238 may take the form of statements in a querylanguage such as Structured Query Language (SQL). Depending on theembodiment, a data request 238 may cause transaction processor 230 toperform any type of data operation that is applicable to the datacollection to which the transaction processor 230 is assigned. In anembodiment, transaction data may simply be a message, such as an eventmessage or log message, that implicitly instructs the transactionprocessor 230 to process the message by performing one or more dataoperations with respect to data found within the message.

As a result of the performed operations, the transaction processor 230may cause data within an assigned data collection to be updated, and/orreturn response data that comprises data retrieved from the assigneddata collection or derived based thereon. Response data may be of anysuitable structure, including without limitation the same structures inwhich the retrieved data is stored within the corresponding datacollection, converted structures such as SQL result sets or eXtendedMarkup Language (XML) documents, or derived structures such as web pagesor images analyzing or visualizing the retrieved data. In an embodiment,certain returned structures in response data are generated by applyingthe retrieved data to templates and/or formatting instructions.

As mentioned above, system 200 utilizes collection data store 234, whichmay be implemented upon one or more storage devices. The collection datastore 234 comprises a plurality of data collections A-C. Each datacollection may be a collection of data structures having a variety offorms, depending on the embodiment. For example, the data collectionsmay comprise a collection of event data structures, a group of lines oftab-delimited data, a relational database, relational database table,set of XML elements, one or more files, any other suitable structuretype, or any combination thereof. In an embodiment, different datacollections within the collection data store 234 may support differentdata structure types. In an embodiment, a data collection comprised ofany of the foregoing data structures is augmented with system-definedand/or user-defined variables that can be updated to describe certaincharacteristics of the data stored in the data collection. Examples ofsuch variables may include counters or metrics.

Each data collection may be associated with collection configurationdata that may be stored within the collection, or stored as a separatefile. Such collection configuration data describes various aspects ofits associated collection, such as one or more identifiers for thecollection, a number of fields found within the collection, a maximumcollection size, and so forth.

In an embodiment, each data collection is associated with a uniquecollection identifier that is assigned when the collection is created.Such an identifier may associate the collection with an entity, such asthose described above. For example, the collection identifier could be acustomer identifier, the name of a software application, an applicationkey assigned to a software application or applications for which thedata collection is maintained, an identifier of a project of a customer(e.g., combination of customer identifier and, or any other suitablecollection identifier. While only three data collections are explicitlydepicted, collection data store 234 may comprise any number of datacollections, limited by a size of the collection data store 234. In anembodiment, each data collection is stored redundantly on multiple datastorage devices, such as those discussed elsewhere herein, andsynchronized there-between.

In an embodiment, each dynamic queue node 224 executes in an isolatedmode, meaning that each dynamic queue node 224 operates independently ofthe other dynamic queue nodes 224, even if collocated on the samecomputing device. Thus, if one dynamic queue node 224 crashes, theremaining dynamic queue nodes 224 will be unaffected. In an embodiment,one technique for ensuring isolation is to execute each dynamic queuenode 224 within a separate system runtime, although any other suitableisolation technique may be utilized.

In an embodiment, each dynamic queue node 224 is an instantiation of thesame execution logic, meaning that each dynamic queue node 224 operatesin essentially the same manner, but with respect to different live dataor requests. In other embodiments, some dynamic queue nodes 224 mayexecute different execution logic than other dynamic queue nodes 224.For instance, state data 246 may include parameters that impact how adynamic queue node 224 operates. As another example, system 200 maysupport different pre-defined types of dynamic queue nodes 224, eachtype supporting different operation sets and/or outputting data indifferent manners. The type of dynamic queue node 224 used for an entitymay be assigned, for instance, by the parameters stored in state data246. In an embodiment, these parameters may specify that a dynamic queuenode 224 use certain data processing instructions for certainoperations, while other parameters in other state data cause anotherdynamic queue node 224 to utilize other data processing instructions forthe certain operations. For instance, state data 246 may optionally belinked to files that contain custom instructions for processing certaintypes of commands.

System 200 further comprises one or more queue monitors 236. A queuemonitor 236 monitors existing dynamic queue nodes 224 to determinewhether the dynamic queue nodes 224 are active or inactive. Queuemonitor 236 instructs or otherwise causes inactive dynamic queue nodes224 to terminate. Queue monitor 236 also updates the queue-entitymapping 244 to remove any mappings to terminated dynamic queue nodes224. In embodiment, queue monitor 236 preserves data existing incollection data store (e.g., collections A-C) and persistent data store232 (e.g., stale data queue 222 and state data 246) for the dynamicqueue nodes 224 that are terminated.

Depending on the embodiment, different criteria may be used to determinewhen a dynamic queue nodes 224 has become inactive. In an embodiment,for example, a dynamic queue node 224 becomes inactive when it has notreceived a transaction from the live data stream 202 and/or a requestfrom data requests 238 within a certain period of time. Queue monitor236 may have access to state data 246 and/or may communicate with queuerouter 208 and/or dynamic queue nodes 224 to make this determination.The certain period may be of a global value, or the certain period maybe set on a per entity basis based on factors such as, the size of thestale data queue 222, size of collections A-C, expected usage patterns,and so forth.

In an embodiment, the period of time is predefined in, for instance, thestate data 246. In an embodiment, the period of time may be adjusteddynamically through various learning processes. For instance, if, withina relatively quick period of time after a dynamic queue node 224 hasbeen terminated, a new dynamic queue node 224 must be instantiatedassociated with the entity, the learning process may adjust thepredefined period to be longer. In an embodiment, the period of timeafter which a dynamic queue node 224 becomes inactive may be a functionof how busy system 200 is. Hence, under heavy server loads, a dynamicqueue node 224 may become inactive more quickly than under lighterserver loads.

In an embodiment, inactive dynamic queue nodes 224 are terminatedimmediately. In another embodiment, queue monitor 236 maintains aprioritized queue of inactive dynamic queue nodes. When utilization ofresources (e.g., memory) reaches a certain threshold (e.g. amount orpercentage available or used), and/or when more resources are needed,queue monitor 236 may select one or more of the inactive dynamic queuenodes 224 to terminate from the queue. The queue may be prioritizedbased on a variety of factors, such as for how long a dynamic queue node224 has been inactive, usage trends, predefined weights indicating animportance for each entity or payments received from each entity, a sizeof the stale data queue, and so forth. In such embodiments, if a dynamicqueue node 224 receives a new transaction or data request, the dynamicqueue node 224 becomes active and is removed from the queue of inactivedynamic queue nodes. In an embodiment, once a dynamic queue node 224 isadded to the queue, the dynamic queue node, or more specifically thequeue manager, may be instructed to dump its live data queue so that thedynamic queue node 224 may be terminated more quickly, if needed. In yetother embodiments, queue monitor 236 maintains a prioritized list ofactive dynamic queue nodes 224, based on the above factors. Whenresources are needed, a certain number of lowest priority dynamic queuenodes 224 are designated as inactive, and thus terminated, or may bemigrated to another system having more available resources. Such amigration is discussed in greater detail herein.

In an embodiment, each dynamic queue node 224 comprises its own queuemonitor 236. Hence, each dynamic queue nodes 224 is configured toregister itself in the queue-entity mapping 244 and/or to terminateitself after a certain period of inactivity. In other embodiments, queuerouter 208 may comprise a queue monitor 236. In yet other embodiments,there is a separate and distinct queue monitor 236 per system or server,that monitors each dynamic queue node 224 on the system or server.

Output interface 240 is utilized by dynamic queue node to sendtransactions or other requested data (e.g., data from collections A-C)to a destination node (e.g., client devices 110 a-110 c). Transactionscan be sent using output interface 240 in any of a variety of possibleformats to send the transactions to at least one of the destinationnodes. In some implementations, a group of transactions is sent, forexample, in a response to a pull request received by input interface206. The group of transactions may be sent in a response to the pullrequest, discussed previously, to one or more of the destination nodes,for example, which may or may not have made the pull request. In someimplementations, the response to the pull request is sent to thedestination node that made the pull request based on the pull requestbeing from that destination node.

Mention is made throughout this disclosure of a single tenant datasystem. A single tenant data system may include many of the previouslymentioned components; however, because there is only a single tenant,queue router 208 would not be needed and may be omitted. As such, inputinterface 206 would be coupled directly with a single dual-queue node.In addition, because queue nodes would not be instantiated orterminated, the queue instantiator and the queue-entity mapping may alsobe omitted. Furthermore, there could only be one partition in persistentdata store 232 and one collection in collection data store 234.

FIG. 3 depicts an illustrative process flow 300 for dynamicallyinstantiating a dual-queue node, in accordance with various embodimentsof the present disclosure. The process flow begins at block 302 where amulti-tenant dual-queue system of a data service, such as, for example,system 200 of FIG. 2, receives live data and/or a request for dataassociated with an entity. In embodiments, the live data would bereceived by, for example, input interface 206 discussed above inreference to FIG. 2. Also as discussed above, live data refers toreal-time data or data in-motion and may comprise one or moretransactions. The request for data may be a request for previouslyreceived live data that is stored in a stale data queue, such as staledata queue 222, associated with the entity.

In either the one or more transactions of the received live data or therequest, the entity may be associated directly or indirectly. Thisassociation may be manifest directly in the one or more transactions orthe request for data by including an identifier that identifies theentity, or indirectly by including an identifier that bears someassociation with the entity in the one or more transactions or therequest for the data.

In some embodiments, the entity may be a customer of the data serviceand the transactions or request for data may include an identifier thatdirectly identifies the customer. In other embodiments, the entity maybe a customer of the data service and the transactions or request fordata may include an identifier of a source of the data, such as anapplication that generated the data, where the source is associated withthe customer (e.g., by way of a table or other mapping) and thusindirectly identifies the customer. In further embodiments, the customermay be a provider of the application from which the live data isreceived, and the live data may concern performance or usage of theapplication. In other embodiments, the entity may be based on thecustomer and one or more other aspects of the live data. For example,the customer may desire to have different repositories such as, forexample, one for each application of a plurality of applicationsprovided by the customer, one for specific types of data of specialinterest to the customer, or any other type of delineation the customerwould like. In such embodiments, the entity may be a combination of thecustomer and the delineation, such as, for example, applicationidentifiers, types of data, etc.

In some embodiments the entity may be based on a device from which thelive data is received. For example, the entity could be related to anInternet of things (IOT) device, such as, for example, a smart meteringdevice, smart automotive sensors, biochip transponders, heart monitoringimplants, connected devices, etc. IOT devices generally include any datacollection devices that operate without regular human intervention toseamlessly report the data collected. These devices may operate overlong distances on cellular networks or via the Internet, but may operatein local cells via wireless personal area network protocols, such as,for example, Zigbee. In such embodiments, the device may be identifieddirectly in the one or more transactions via a device identifier, suchas a service set identifier (SSID) assigned to the device that isincluded in the one or more transactions. The device may also beidentified indirectly via, for example, the data produced by the devicethat is included in the one or more transactions.

Moving on to block 304, a determination is made as to whether adual-queue node, such as dynamic queue node 224, is currently assignedto the customer on the multi-tenant dual-queue system. This may beaccomplished by referencing queue-entity mapping data, such asqueue-entity mapping 244, that relates each of the currentlyinstantiated dual-queue nodes on the multi-tenant dual-queue system witha respective entity. If a dual-queue node is currently assigned to theentity, then the process flow may proceed to block 308. If, however, adual-queue node is not currently assigned to the entity, the processflow may proceed to block 306 where a dual-queue node is instantiatedand assigned to the entity to process the received live data or servicethe received data request. The actual instantiation of a dual-queue nodeis discussed in greater detail in reference to FIG. 4, and elsewhereherein.

At block 308 the live data and or the request for data may be routed tothe dual-queue node assigned to the entity. This can be accomplished,for example, by queue router 208 discussed above. At block 310, the livedata may be processed by the dual-queue node or the data request may beserviced by the dual-queue node as discussed elsewhere herein.

Once the live data is processed or the data request has been serviced,the process may proceed to block 312 where a determination is made as towhether the dual-queue node is active or inactive. Depending on theembodiment, different criteria may be used to determine when adual-queue node has become inactive. In an embodiment, for example, adual-queue node becomes inactive when it has not received live dataand/or any data requests within a certain predefined or preconfiguredperiod of time.

The certain period may be of a global value, or the certain period maybe set on a per entity basis based on factors, such as, for example, theamount of data stored in the stale data queue of the dual-queue node,expected usage patterns, and so forth. The certain period of time may beadjusted dynamically through various learning processes implemented inthe multi-tenant dual-queue system. For instance, if, within arelatively quick period of time after a dual-queue node is terminated, anew dual-queue node must be instantiated for the entity, the learningprocess may adjust the predefined period to be longer. In an embodiment,the period of time after which a dual-queue node becomes inactive may bea function of how busy the multi-tenant system is and/or a function ofavailable resources on the multi-tenant system. Hence, under heavyserver loads, a dual-queue node may become inactive more quickly thanunder lighter server loads.

If the dual-queue node is still active, the process may return to block310 where any additional live data is processed or data requests areserviced. If, however, dual-queue node is determined to be inactive, theprocess proceeds to block 314 where the dual-queue node is terminated.This may be accomplished by terminating any memory/processor basedprocesses and may leave only the stale queue portion of the dual-queueintact, along with any state data associated with the dual-queue node toenable a new dual-queue node to be instantiated at a later time, butpick up where the previous dual-queue node left off. In addition, inembodiments utilizing queue-entity mapping data, the queue-entitymapping data would be updated to remove the terminated dual-queue nodefrom the queue-entity mapping data.

In an embodiment, inactive dual-queue nodes are terminated immediatelyat block 314, as described above. In another embodiment, the dual-queuenode may be added to a prioritized queue of inactive dynamic queuenodes. When utilization of resources (e.g., memory) reaches a certainthreshold (e.g. amount or percentage, available or used), and/or whenmore resources are needed, one or more of the inactive dual-queue nodes224 are selected from the prioritized queue to be terminated. The queuemay be prioritized based on a variety of factors, such as for how long adual-queue node has been inactive, usage trends, predefined weightsindicating an importance for each entity or payments received from eachentity, a size of the stale data queue, and so forth. In suchembodiments, if a dual-queue node receives a new transaction or datarequest, the dual-queue node becomes active and is removed from thequeue of inactive dual-queue nodes. In an embodiment, once a dual-queuenode is added to the queue, the dual-queue node, or more specifically aqueue manager of the dual-queue node, may be instructed to dump its livedata queue so that the dual-queue node may be terminated more quickly,if needed.

FIG. 4 depicts a more detailed process flow 400 for block 306 of FIG. 3,in accordance with various embodiments of the present disclosure. If adual-queue node has not been assigned to the entity, then a component ofthe multi-tenant dual-queue system, such as queue instantiator 242, mayinstantiate a new dual-queue node according to process flow 400. Processflow 400 begins at block 402 where a dual-queue manager, such as queuemanager 226, is initialized. This may be accomplished, for example, bymerely instantiating a new instance of a queue manager application.

At block 404, a portion of memory may be allocated to serve as a livedata queue for the dual-queue node. The amount of memory allocated may,in some embodiments, be entity specific. For example, an entity thatrequires more data processing capacity may be allocated a larger portionof memory than an entity that does not require as much data processingcapacity. In other embodiments, the amount of memory allocated may bebased on available resources of the multi-tenant system. For example, ifthe multi-tenant system is under a heavy server load then less memorywould be allocated than would be if the server were under a light serverload.

At block 406, a partition of persistent memory is initialized to serveas a stale data queue of the dual-queue node. If a partition alreadyexists, this may be accomplished by identifying the partition associatedwith the entity and associating the partition with the dual-queue nodeto serve as the stale data queue. If the partition does not alreadyexist, then a new partition is allocated in persistent memory.Persistent memory includes any of the non-volatile storage devicesmentioned herein, or combinations thereof.

At block 408, the initialized partition is then associated with thedual-queue node. Associating the partition with the dual-queue node maybe accomplished by loading an identifier associated with the partitioninto the newly instantiated queue manager. Finally queue-entity mappingdata would be updated at block 410 to include the newly instantiateddual-queue node and a correlation to the entity associated therewith.

FIG. 5 depicts an illustrative process flow 500 for migrating adual-queue node from a multi-tenant system to a single tenant system, inaccordance with various embodiments of the present disclosure. Becauseof the previously discussed varied resource allocation betweenmulti-tenant systems and single tenant systems, it will be appreciatedthat the multi-tenant systems generally offer a cost advantage on a percustomer basis in addition to offering greater scalability than thesingle tenant systems. Alternatively, it will also be appreciated thatthe single tenant systems would typically offer greater or moreconsistent performance at a greater cost and less scalability. As such,a data service may offer a potential customer wishing to try out theservices offered by data service 102 a free, or reduced cost, trialperiod on the multi-tenant dual-queue systems 106 without the cost tothe data service 102 of having to implement a single tenant dual-queuesystem for such a trial. This would also enable the data service tooffer lower cost solutions to current customers that may not need thesingle tenant system. The data service may offer these trial/lower-costoptions in the hope that the customer would decide to subscribe to asingle tenant solution in the future. Should the customer decide tosubscribe to the single tenant solution in the future, then it may bedesirable to have the ability to migrate the customer from themulti-tenant system to the single tenant system. Such a process startsat block 502 where a request is received to migrate data from amulti-tenant system to a single tenant system associated with theentity. In response to the request, a dynamic dual-queue node from themulti-tenant system would be instantiated, unless a dual-queue node isalready associated with the entity on the multi-tenant system. Thisprocess would be similar to that described in reference to FIG. 3 wherea data request is made.

At block 504, the dual-queue node would forward live data, if any isreceived while servicing the migration request, along with any staledata that is disjoint from the live data to the single tenant system. Asused herein, disjoint is utilized as it would be in the art to recognizedata in one set that does not exist in another set. As such, saidanother way, stale data that is disjoint from the live data wouldinclude any stale data that is not included in the live data. This wouldensure that duplicate data is not transmitted to the single tenantsystem. In addition to the live data and disjoint stale data, any statedata, and/or the previously discussed collections, may also be forwardedto the single tenant system.

At block 506, the dual-queue node for the entity on the multi-tenantsystem is terminated. This termination would be similar to thetermination of an inactive queue, except that any data residing within apersistent repository would also be deleted as it would be unnecessarilyconsuming resources of the persistent repository.

FIG. 6 depicts an illustrative process flow 600 for moving data to anexternal remote data store where the external remote data store is onlyperiodically, or ephemerally, in communication with the data service. Insome embodiments, an entity may only be able to periodically, orephemerally, connect with a dual-queue system to access data associatedwith the entity. This may be the case whether the dual-queue system is asingle tenant dual-queue system or a multi-tenant dual-queue system.This may be of particular concern to a customer of the data service,such as, for example, an independent software developer, that may onlyperiodically be connected with the data service, as the received datawould continue to build up in the stale data queue during the period inwhich the customer has yet to download. In the single tenant dual-queuesystem, the data service could offer the customer additional persistentstorage space, or could automatically implement additional persistentstorage space seamlessly without the customer even realizing that theamount of persistent storage space has been increased. In themulti-tenant solution, however, one of the concerns is resourceutilization. As such, it may be desirable to enable portions of thestale data to be transmitted to these periodically connected remote datastores to reduce the amount of data that persists in the stale dataqueue.

Such a process is depicted by process flow 600. Process flow 600 maybegin at block 602 where live data associated with an entity isreceived. At block 604, the live data is routed to a dual-queue nodeassigned to the entity. In a multi-tenant system, this process would besimilar to that discussed in reference to FIG. 3. At block 606, the livedata may be loaded into a live data queue of the dual-queue node. Atblock 608, a persistent backup of the live data may be stored in a staledata queue of the dual-queue node. Because there may be no remote datastore to which to transmit the live data loaded into the live dataqueue, the live data queue may be flushed once the live data is fullyprocessed, for example by transaction processor 230. After the live datais flushed, the dual-queue node would merely store the copy of the livedata as stale data in the stale data queue. In a multi-tenant dual-queuesystem, the dual-queue node would then be terminated once it becomesinactive, as discussed elsewhere herein.

At block 610, a data connection with the remote data store and the dataservice, more specifically the dual-queue node assigned to the entity,may be established. In some embodiments, such a data connection could beinitiated by the data service, if, for example, the data service detectsthat the remote data store is currently on a network accessible to thedata service, such as the Internet, for example. In other embodiments,such a data connection could be initiated by the entity, either byenabling the remote data store to automatically seek to establish aconnection, or by manually initiating such a connection. In either case,in a multi-tenant system a dual-queue node may be instantiated for theentity associated with the remote data store, in a similar manner tothat discussed elsewhere herein. The remote data store may be directlyor indirectly associated with the entity in a similar manner to thatdiscussed elsewhere herein in reference to transactions or datarequests. Any of these embodiments may be enabled, for example, by anagent installed on the same device as the remote data store, or on adevice coupled with the remote data store. The remote data store couldbe, for example, a hard drive of a laptop, or any other suitablepersistent data storage device in communication with a suitablecomputing device, such as those persistent data storage devices andcomputing devices discussed elsewhere herein.

At block 612, at least a portion of the stale data is transmitted to theremote data store. This may be accomplished through a push mechanisminitiated by the data service, or through a pull mechanism initiated bythe device on which the remote data store resides or a device coupledwith the remote data store. In some embodiments, the remote data storemay be online for a long enough period of time to completely empty thestale data queue along with any live data that may have been receivedwhile the remote data store was connected with the data service. Inother embodiments, the remote data store may only be connected to thedata service for a long enough period of time to download a portion ofthe stale data in the stale data queue. In such embodiments, thetransactions transmitted and received may be tracked utilizing, forexample, the above discussed acknowledgement log that resides in statedata 246. In some embodiments, summary statistics concerning the databeing transmitted to the remote data store may concurrently be sent tothe computing device on which the remote data store resides or to whichthe remote data store is coupled. These summary statistics may enable acustomer/potential customer of the data service to view the summarystatistics while the data is being sent to the remote data store, whichmay be time consuming for large amounts of data and/or slower dataconnections. These summary statistics are discussed in detail elsewhereherein.

At block 614, the data transmitted to the remote data store is deletedfrom the stale data queue. In some embodiments, this would be based onthe above mentioned acknowledgment log to ensure any data that was notacknowledged by the remote data store, and thus lost in transmission, isnot deleted.

FIG. 7 depicts an illustrative process flow 700 for monitoring a staledata queue for deletion events. In embodiments where a remote data storeis only able to periodically, or ephemerally, connect with a dual-queuesystem to access data associated with the entity, the data may continueto build in a stale data queue associated with the entity. As mentionedabove, in a multi-tenant solution one concern is resource utilization.As such, it may be desirable to enable automatic deletion of portions ofstale data associated with an entity in response to certain deletionevents. This automatic deletion may be carried out, for example, byqueue monitor 236. Such deletion events may be based, for example, onresource consumption. Such a process is depicted by process flow 700.

Process flow 700 begins at block 702 where a stale data queue ismonitored for a deletion event. In embodiments, such a deletion eventmay be monitored by, for example, queue monitor 236. A deletion eventmay be any event that could indicate a need or reason for which todelete data from the stale data queue. Such an event may be, forexample, whether stale data exceeds a threshold of age, whether thecumulative size of the stale data exceeds a threshold, whether an amountof available space in the stale data queue is at or below a predefinedthreshold, etc. These predefined thresholds may be entity-specific. Forexample, a potential customer on a trial period may have differentthresholds than a customer that pays for the multi-tenant dual-queuesystem. These thresholds may also be adjusted dynamically throughvarious learning processes implemented in the multi-tenant dual-queuesystem. In an embodiment, the thresholds may be a function of how busythe multi-tenant system is and/or a function of available resources onthe multi-tenant system. Hence, under heavy server loads, a stale dataqueue may reach a deletion event more quickly than under lighter serverloads.

At block 704, a determination is made as to whether or not a deletionevent has occurred. If a deletion event has not occurred, then theprocess proceeds back up to block 702 and the monitoring would continue.If, however, a deletion event has occurred, in some embodiments, asubset of stale data is deleted at block 706. Such a subset may bedetermined by any suitable factor, such as, for example, age of the dataso that the oldest data is deleted first, or a priority associated withsubsets of the data. For instance, a customer may value certain dataover other data. In such embodiments, the customer may be able todesignate the certain data as having a higher priority than the otherdata. In some embodiments, a warning may be transmitted by the dataservice to the customer/potential customer, via email, for example. Sucha warning may include an indication that the customer/potential customerhas reached the deletion event; that the customer/potential customershould log in to download the stale data from the stale data queue; theamount of data deleted from the stale data queue; and/or summarystatistics of at least the deleted data. Such summary statistics arediscussed in detail elsewhere herein.

In some embodiments, rather than deleting the subset of stale data, anew stale data queue may be initialized. This may be accomplished byallocating a new stale data queue in a new partition of a persistentdata store. In such embodiments, newly received live data would bebacked up to the new stale data queue. The customer/potential customermay not gain access to data in the new stale data queue until thecustomer/potential customer downloads stale data from the previouslyallocated stale data queue, pays an access fee to access the data in thenew stale data queue, or pays a storage fee to maintain the new staledata queue. In addition, a warning may be transmitted by the dataservice to the customer/potential customer, via email, for example. Sucha warning may include an indication that the customer/potential customerhas reached the deletion event and that the user should log in todownload the stale data from the stale data queue. It will beappreciated that allocation of a new stale data queue may be limited bythe resources available to the dual-queue system.

FIG. 8 depicts an illustrative process flow 800 for alerting a customerupon detection of an alert event, in accordance with various embodimentsof the present disclosure. In embodiments, customers may subscribe to adata service as described herein, in addition potential customers maypartake in a trial of the data service as discussed above in referenceto dual-queue nodes on a multi-tenant system. However, if a customer orpotential customer never retrieves the customer's data, then thecustomer may not see the benefit in the data service. As such, it may bebeneficial to alert the customer or potential customer upon detecting anevent the customer may desire to be apprised of.

Such a process is depicted by process flow 800. Process flow 800 maybegin at block 802 where live data associated with a customer isreceived. At block 804, the live data is routed to a dual-queue nodeassigned to the customer. In a multi-tenant system this process would besimilar to that discussed in reference to FIG. 3 above. At block 806,the live data may be loaded into a live data queue of the dual-queuenode.

At block 808, the live data may be processed to generate summarystatistics. The summary statistics may be generated, for example, bytransaction processor 230 and may be stored in conjunction with thecollections discussed above. The summary statistics may include any datathat is able to be derived from the received live data, including crashstatistics and usage statistics associated with an application providedby the customer to the customer's users. These summary statistics mayenable the customer to get a big picture view of the live data receivedfor the customer and concerning the application, and may also enable thecustomer to view possible problem areas with the application or the useof the application.

At block 810, an alert is transmitted to the customer in response todetecting an alert event. An alert event, in some embodiments, is basedon the generated summary statistics. For example, if the summarystatistics show that the customer's application has crashed a certainnumber of times, then this could trigger an alert event Likewise, if thesummary statistics show that the usage of the customer's application isreduced, then this could cause an alert event to be triggered. The alertevent may also be based on other criteria, in addition to, or in placeof, the summary statistics. For example, an alert may be sent when thestale queue associated with the customer reaches, or falls below, apredefined threshold of available space or when the stale data reaches,or surpasses, a predefined amount of stale data. An alert may also betriggered in the event that data from the stale data queue is deleted,as discussed in reference to FIG. 7 above. The alert may also be basedon an amount of time since the customer last logged in. In addition, thealert may be based on, or include, demographic data associated with useof an application provided by the customer. Such demographic data mayinclude, for example, a location of the use of the application, dataderived from the location of use, such as average income in thegeographic location, population density of the geographic location,average age of the geographic location, etc. The above discusseddemographic data is meant to be illustrative of possible demographicdata and should not be treated as limiting of this disclosure. It willbe apparent to one of skill in the art that a multitude of otherdemographic data can be utilized, and this is expressly contemplatedherein.

The alerts may be generated, for example, by queue monitor 236, whichwould have access to any of the applicable information discussed above.The alerts may include any applicable information surrounding the alertevent, or any additional information that may be useful to the customer.For example, the alert may include a number of crashes of the customer'sapplication, statistics on the usage of the customer's application, anindication of an amount of space available in the customer's stale dataqueue, an indication of an amount of data in the customer's stale dataqueue, a number of transactions that have been received since the userlast logged in, etc. Alerts such as these may be beneficial to try andretain existing customers or attract potential customers by gettingtheir attention directed towards the collected data. As such, it mayalso be beneficial to include a link in the alert to the customer's datain an effort to make the customer's access of the data easier or a linkto enable the customer to migrate from a multi-tenant server to a singletenant server. In embodiments, the alert may be sent via any suitablemedium including email, text message (e.g., via short message service(SMS)), a chat application that enables the customer to initiate a chatwith the data service to see what options are available to the customer(e.g., upgrades to the customer's current service), or a pop-up message(e.g., in an application provided by the data service).

In addition to being utilized to trigger alerts, the summary statisticsmay also be utilized to give the customer an overview of the data. Forexample, when the customer is downloading transactions, the summarystatistics may be utilized to give the customer an almost immediatepicture of the data that the customer is downloading. In addition, thesummary statistics, in embodiments, may also include summary statisticson data that has been deleted due to a deletion event, for example. Assuch, although the customer cannot view the data, since it was deleted,the customer can still see what the statistics were for that deleteddata. In addition, as discussed elsewhere herein, the customer mayactually have multiple dual-queue systems assigned to the customer. Forexample, the customer may have a dual-queue node associated with each ofa number of applications that are provided by the customer. The summarystatistics may be aggregated and presented to the customer as anaggregate summary statistics report across all of the customer'sapplication.

Having described embodiments of the present invention, an exampleoperating environment in which embodiments of the present invention maybe implemented is described below in order to provide a general contextfor various aspects of the present invention. Referring to FIG. 9, anillustrative operating environment for implementing embodiments of thepresent invention is shown and designated generally as computing device900. Computing device 900 is but one example of a suitable computingenvironment and is not intended to suggest any limitation as to thescope of use or functionality of the invention. Neither should thecomputing device 900 be interpreted as having any dependency orrequirement relating to any one or combination of componentsillustrated.

The invention may be described in the general context of computer codeor machine-useable instructions, including computer-executableinstructions such as program modules, being executed by a computer orother machine, such as a personal data assistant or other handhelddevice. Generally, program modules including routines, programs,objects, components, data structures, etc., refer to code that performparticular tasks or implement particular abstract data types. Theinvention may be practiced in a variety of system configurations,including handheld devices, consumer electronics, general-purposecomputers, more specialized computing devices, etc. The invention mayalso be practiced in distributed computing environments where tasks areperformed by remote-processing devices that are linked through acommunications network.

With reference to FIG. 9, computing device 900 includes a bus 910 thatdirectly or indirectly couples the following devices: memory 912, one ormore processors 914, one or more presentation components 916,input/output (I/O) ports 918, I/O components 920, and an illustrativepower supply 922. Bus 910 represents what may be one or more busses(such as, for example, an address bus, data bus, or combinationthereof). Although depicted in FIG. 9, for the sake of clarity, asdelineated boxes that depict groups of devices without overlap betweenthese groups of devices, in reality, this delineation is not so clearcut and a device may well fall within multiple ones of these depictedboxes. For example, one may consider a display to be one of the one ormore presentation components 916 while also being one of the I/Ocomponents 920. As another example, processors have memory integratedtherewith in the form of cache; however, there is no overlap depictedbetween the one or more processors 914 and the memory 912. A person ofskill in the art will readily recognize that such is the nature of theart, and it is reiterated that the diagram of FIG. 9 merely depicts anillustrative computing device that can be used in connection with one ormore embodiments of the present invention. It should also be noticedthat distinction is not made between such categories as “workstation,”“server,” “laptop,” “handheld device,” etc., as all such devices arecontemplated to be within the scope of computing device 900 of FIG. 9and any other reference to “computing device,” unless the contextclearly indicates otherwise.

Computing device 900 typically includes a variety of computer-readablemedia. Computer-readable media can be any available media that can beaccessed by computing device 900 and includes both volatile andnonvolatile media, and removable and non-removable media. By way ofexample, and not limitation, computer-readable media may comprisecomputer storage media and communication media. Computer storage mediaincludes both volatile and nonvolatile, removable and non-removablemedia implemented in any method or technology for storage of informationsuch as computer-readable instructions, data structures, programmodules, or other data. Computer storage media includes, but is notlimited to, RAM, ROM, EEPROM, flash memory or other memory technology,CD-ROM, digital versatile disks (DVD) or other optical disk storage,magnetic cassettes, magnetic tape, magnetic disk storage or othermagnetic storage devices, or any other medium which can be used to storethe desired information and which can be accessed by computing device900. Computer storage media does not comprise signals per se, such as,for example, a carrier wave. Communication media typically embodiescomputer-readable instructions, data structures, program modules, orother data in a modulated data signal such as a carrier wave or othertransport mechanism and includes any information delivery media. Theterm “modulated data signal” means a signal that has one or more of itscharacteristics set or changed in such a manner as to encode informationin the signal. By way of example, and not limitation, communicationmedia includes wired media such as a wired network or direct-wiredconnection, and wireless media such as acoustic, RF, infrared, and otherwireless media. Combinations of any of the above should also be includedwithin the scope of computer-readable media.

Memory 912 includes computer storage media in the form of volatileand/or nonvolatile memory. The memory may be removable, non-removable,or a combination thereof. Typical hardware devices may include, forexample, solid-state memory, hard drives, optical-disc drives, etc.Computing device 900 includes one or more processors 914 that read datafrom various entities such as memory 912 or I/O components 920.Presentation component(s) 916 present data indications to a user orother device. Illustrative presentation components include a displaydevice, speaker, printing component, vibrating component, etc.

I/O ports 918 allow computing device 900 to be logically coupled toother devices including I/O components 920, some of which may be builtin. Illustrative components include a stylus, a microphone, joystick,game pad, satellite dish, scanner, printer, wireless device, etc. TheI/O components 920 may provide a natural user interface (NUI) thatprocesses air gestures, voice, or other physiological inputs generatedby a user. In some instances, inputs may be transmitted to anappropriate network element for further processing. An NUI may implementany combination of speech recognition, stylus recognition, facialrecognition, biometric recognition, gesture recognition both on screenand adjacent to the screen, air gestures, head and eye tracking, andtouch recognition (as described elsewhere herein) associated with adisplay of the computing device 900. The computing device 900 may beequipped with depth cameras, such as stereoscopic camera systems,infrared camera systems, RGB camera systems, touchscreen technology, andcombinations of these, for gesture detection and recognition.Additionally, the computing device 900 may be equipped withaccelerometers or gyroscopes that enable detection of motion.

As can be understood, implementations of the present disclosure providefor various approaches to data processing. The present invention hasbeen described in relation to particular embodiments, which are intendedin all respects to be illustrative rather than restrictive. Alternativeembodiments will become apparent to those of ordinary skill in the artto which the present invention pertains without departing from itsscope.

From the foregoing, it will be seen that this invention is one welladapted to attain all the ends and objects set forth above, togetherwith other advantages which are obvious and inherent to the system andmethod. It will be understood that certain features and subcombinationsare of utility and may be employed without reference to other featuresand subcombinations. This is contemplated by and is within the scope ofthe claims.

The invention claimed is:
 1. A computer-implemented method comprising:receiving, at a computing system, data associated with an entity;determining that a first dual-queue node is assigned to the entity, thefirst dual-queue node including a live data queue and a stale dataqueue; routing the data to the first dual-queue node, wherein the firstdual-queue node stores the data; and causing the first dual-queue nodeto load the data into the live data queue for processing.
 2. Thecomputer-implemented method of claim 1, further comprising: upondetermining that no dual-queue node is assigned to the entity,dynamically instantiating the first dual-queue node; allocating aportion of memory of the computing system for the live data queue of thefirst dual-queue node; and assigning the first dual-queue node to theentity.
 3. The computer-implemented method of claim 1, furthercomprising: identifying a partition in a persistent data storeassociated with the computing system; and employing the identifiedpartition as the stale data queue of the first dual-queue node.
 4. Thecomputer-implemented method of claim 1, further comprising: initializinga partition in a persistent data store associated with the computingsystem; and employing the initialized partition as the stale data queueof the first dual-queue node.
 5. The computer-implemented method ofclaim 1, further comprising: updating queue-entity mapping data of thecomputing system to include the first dual-queue node and the firstdual-queue node's assignment to the entity.
 6. The computer-implementedmethod of claim 1, further comprising: initializing a dual-queue monitorfor the first dual-queue node; employing the dual-queue monitor togenerate an alert, wherein generating the alert is triggered by one ormore events encoded in the data; providing the alert to the entity. 7.The computer-implemented method of claim 1, further comprising: causingthe first dual-queue node to generate summary statistics based on thedata; and causing the first dual-queue node to detect one or more eventsencoded in the data based on the generated summary statistics.
 8. Thecomputer-implemented method of claim 1, further comprising: causing thefirst dual-queue node to detect an event encoded in the data, whereinthe is generated when an available space of the stale data queue of thefirst dual-queue node falls below a predefined threshold.
 9. Thecomputer-implemented method of claim 1, further comprising: causing thedual-queue node to detect an event encoded in the data, wherein theevent includes a deletion associated with stale data stored in the staledata queue.
 10. The computer-implemented method of claim 1, furthercomprising: causing the dual-queue node to detect an event encoded inthe data, wherein the event is based on an amount of time elapsed sincecredentials associated with the entity were last employed to access thecomputing system.
 11. The computer-implemented method of claim 1,further comprising: providing the entity with an alert that includesdemographic data associated with a use of an application provided by theentity.
 12. The computer-implemented method of claim 1, furthercomprising: providing the entity with an alert that includes a link toparticular data associated with the alert.
 13. The computer-implementedmethod of claim 1, further comprising: providing the entity with analert that indicates an amount of space that is currently available inof the stale data queue.
 14. The computer-implemented method of claim 1,further comprising: causing the first dual-queue node to detect adeletion event associated with stale data stored in the stale dataqueue; generating summary statistics based on the received data, whereinthe summary statistics includes deletion statistics based on thedeletion event; and providing the summary statistics to the entity. 15.The computer-implemented method of claim 1, further comprising: causingthe first dual-queue node to generate summary statistics based on thereceived data, wherein the summary statistics include statistics thatare aggregated across a plurality of dual-data queues associated withthe entity; and providing the summary statistics to the entity.
 16. Thecomputer-implemented method of claim 11, further comprising:transmitting an alert to the entity, wherein the alert is transmitted byat least one of an email, a short message service (SMS), a chatapplication, or a pop-up message.
 17. The computer-implemented method ofclaim 1, further comprising: storing a persistent copy of the receiveddata in the stale data queue.
 18. The computer-implemented method ofclaim 1, further comprising: determining a subset of stale data storedin the stale data queue for deletion.
 19. The computer-implementedmethod of claim 1, further comprising: causing the first dual-queue nodeto monitor the stale data queue for a deletion event.
 20. Thecomputer-implemented method of claim 1, further comprising: establishinga connection with a remote data store that is separate from thecomputing system; employing the connection to transmit a portion ofstale data stored in the stale data queue to the remote data store; anddeleting the portion of the stale data from the stale data queue. 21.The computer-implemented method of claim 1, wherein the computing systemis a multi-tenant system, and wherein the method further comprises:receiving a request to migrate the data to a single-tenant systemassociated with the entity; dynamically instantiating a seconddual-queue node associated with the entity on the single-tenant DQS;forwarding the data to the second dual-queue node instantiated in thesingle-tenant system; and terminating the first dual-queue nodeinstantiated in the multi-tenant system.
 22. The computer-implementedmethod of claim 1, further comprising: receiving a request for the data;determining that a copy of the data is stored as stale data in the staledata queue; retrieving the copy of the data stored as stale data; andemploying the copy of the data to service the request for the data. 23.The computer-implemented method of claim 1, further comprising: inresponse to determining, based on a period of inactivity, that the firstdual-queue node is inactive, terminating the dual-queue node.
 24. Thecomputer-implemented method of claim 1, further comprising: in responseto determining that the first dual-queue node is inactive, terminatingthe first dual-queue node; and in response to receiving additional dataassociated with the entity, re-instantiating the first dual-queue nodeusing preserved state data stored in the stale data queue for theterminated first dual-queue node.
 25. A computing system comprising: oneor more processors; and one or more computer-readable storage mediacontaining instructions which, in response to execution by the one ormore processors, cause the one or more processors to perform actionsincluding: receiving, at the computing system, data associated with anentity; determining that a first dual-queue node is assigned to theentity, the first dual-queue node including a live data queue and astale data queue; routing the data to the first dual-queue node, whereinthe first dual-queue node stores the data; and causing the firstdual-queue node to load the data into the live data queue forprocessing.
 26. The computing system of claim 25, wherein the computingsystem further comprises a plurality of dual-queue nodes that does notinclude the first dual-queue node, the actions further comprising: inresponse to determining that each of the plurality of dual-queue nodesis not assigned to the entity, dynamically instantiating the firstdual-queue node; allocating a portion of memory of the computing systemfor the live data queue of the first dual-queue node; and assigning thefirst dual-queue node to the entity.
 27. The system of claim 25, whereinthe computing system comprises a plurality of dual-queue nodes that doesnot include the first dual-queue node, the actions further comprising:in response to determining that each of the plurality of dual-queuenodes is not assigned to the entity, dynamically instantiating the firstdual-queue node; identifying a partition in a persistent data storeassociated with the computing system; employing the identified partitionas the stale data queue of the first dual-queue node; and assigning thefirst dual-queue node to the entity.
 28. One or more non-transitorycomputer-storage media having executable instructions, which, whenexecuted by a computing device, cause the computing device to performsactions comprising: receiving, at a computing system, data associatedwith an entity; determining that a first dual-queue node is assigned tothe entity, the first dual-queue node including a live data queue and astale data queue; routing the data to the first dual-queue node, whereinthe first dual-queue node stores the data; and causing the firstdual-queue node to load the data into the live data queue forprocessing.
 29. The one or more computer-storage media of claim 28,wherein the computing system comprises a plurality of dual-queue nodesthat does not include the first dual-queue node, the actions furthercomprising: in response to determining that each of the plurality ofdual-queue nodes is not assigned to the entity, dynamicallyinstantiating the first dual-queue node; initializing a partition in apersistent data store associated with the computing system; employingthe initialized partition as the stale data queue of the firstdual-queue node; and assigning the first dual-queue node to the entity;30. The one or more computer-storage media of claim 28, wherein thecomputing system comprises a plurality of dual-queue nodes that does notinclude the first dual-queue node, the actions further comprising: inresponse to determining that each of the plurality of dual-queue nodesis not assigned to the entity, dynamically instantiating the firstdual-queue node; assigning the first dual-queue node to the entity; andupdating queue-entity mapping data of the computing system to includethe first dual-queue node and the first dual-queue node's assignment tothe entity.